
package controlador;


import java.awt.AWTEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.ArrayList;
import java.util.List;
import modelo.*;
import vista.VentanaProducto;
import vista.VentanaDetalleProductoTablaModel;

public class ControladorVentanaProducto implements ActionListener{

	private VentanaProducto ventanaProducto = new VentanaProducto();
	private ProductoDAO productoDAO;
	public final List<DetalleProducto> productos = new ArrayList<DetalleProducto>();
    private IngredienteDAO ingredienteDAO = new IngredienteDAO();
    private CategoriaDAO categoriaDAO = new CategoriaDAO();
    private DetalleProducto detProducto;
	
	public ControladorVentanaProducto() {
		super();
		ventanaProducto = new VentanaProducto();
		ventanaProducto.setLocationRelativeTo(null);
		ventanaProducto.setVisible(true);
		ventanaProducto.addListener(this);
		ingredienteDAO = new IngredienteDAO();
		categoriaDAO = new CategoriaDAO();
		List<String> milista1 = new ArrayList<String>();
		milista1 = ingredienteDAO.consultarDescripcionIngredientes();
		ventanaProducto.setCargarComboIngrediente(milista1);
		List<String> milista2 = new ArrayList<String>();
		milista2=categoriaDAO.consultarCategoriasNombre();
		ventanaProducto.setCargarComboCategoria(milista2);
		ventanaProducto.setJtxtcodIngrediente(ingredienteDAO.buscarIngrediente(ventanaProducto.getJcmbIngredientes()));
		ventanaProducto.setJtxtCodCategoria(categoriaDAO.buscarCategoria(ventanaProducto.getJcmbNombreCategoria()));
	}

	public void actionPerformed(ActionEvent e) {
		if  (e.getActionCommand().equals("Registrar")) 
			RegistrarProducto();
		else if(e.getActionCommand().equals("Agregar")){
			CargarIngrediente(ventanaProducto.getcodIngrediente(),ventanaProducto.getJcmbIngredientes(),ventanaProducto.getCantidad());
		}	
		else if(e.getActionCommand().equals("Cancelar"))
			ventanaProducto.borrarDatos();
		
		else if(e.getActionCommand().equals("Salir"))
			System.exit(9);
	
		
		if(!(ventanaProducto.getJcmbIngredientes().equals(AWTEvent.MOUSE_EVENT_MASK))){
			ventanaProducto.setJtxtcodIngrediente(ingredienteDAO.buscarIngrediente(ventanaProducto.getJcmbIngredientes()));
		}	
	    
		//Aqui un pequeño problema, que solo hace esto, solo si el if de arriba se cumple...rayos.
		if(!(ventanaProducto.getJcmbNombreCategoria().equals(AWTEvent.MOUSE_EVENT_MASK))){
			ventanaProducto.setJtxtCodCategoria(categoriaDAO.buscarCategoria(ventanaProducto.getJcmbNombreCategoria()));
		}
	}

	public void RegistrarProducto() {
		try
		{
			if( ventanaProducto.getCodProducto().equals("")|| 
				    ventanaProducto.getDescripcionProd().equals("")||
					ventanaProducto.getCantidad().equals("")||
					ventanaProducto.getFechaRegistro().equals("")||
					ventanaProducto.getCodCategoria().equals(""))
				//Deben estar todos los campos llenos para poder registrar el Producto
				ventanaProducto.mostrarMensaje("Debe llenar todos los campos");
			else
			{
				productoDAO = new ProductoDAO();
				String codProducto =  ventanaProducto.getCodProducto();
				String codCategoria =  ventanaProducto.getCodCategoria();
				String descripcionProd =  ventanaProducto.getDescripcionProd();
				String fechaRegistro = ventanaProducto.getFechaRegistro();
				float precio = Float.parseFloat(ventanaProducto.getPrecio());
				int cantidad = productoDAO.consultarProductos().size() + 1;
				Producto producto = new Producto(codProducto,descripcionProd,codCategoria,fechaRegistro,precio,cantidad);
				productoDAO.registrarProducto(producto);
				
				DetalleProducto detProducto;
				for(int i = 0; i < ventanaProducto.getjTableIngredientes().getRowCount(); i++)
				{
					String codIng = ventanaProducto.getjTableIngredientes().getValueAt(i,0).toString();
					String descIng = ventanaProducto.getjTableIngredientes().getValueAt(i,1).toString();
					float cant = Float.parseFloat(ventanaProducto.getjTableIngredientes().getValueAt(i,2).toString());
					productoDAO = new ProductoDAO();
					detProducto = new DetalleProducto(codProducto,codIng,descIng,cant);
					productoDAO.registrarDetalleProducto(detProducto);
				}
				ventanaProducto.borrarDatos();
				ventanaProducto.mostrarMensaje("El Producto se ha registrado exitosamente");
				
			}
		}
		catch(Exception e)
		{
			ventanaProducto.mostrarMensaje("El Producto No se pudo registrar, verifique que los datos sean correctos");
			ventanaProducto.borrarDatos();
		}
	}

	public void CargarIngrediente(String codIng, String desc, String cant){
		try
		{
			if(ventanaProducto.getCantidad().equals("")||
					ventanaProducto.getcodIngrediente().equals(""))
			{
				ventanaProducto.mostrarMensaje("Debe llenar los campos referentes al ingrediente a cargar");
			}
			else
			{
				try
				{
				detProducto = new DetalleProducto(codIng,desc,Float.parseFloat(cant));
				productos.add(detProducto);
				ventanaProducto.setResultados(new VentanaDetalleProductoTablaModel(productos));
				ventanaProducto.mostrarMensaje("Ingrediente cargado a la Lista...");
				}	
				catch(Exception e)
				{
					ventanaProducto.mostrarMensaje("El ingrediente ya se cargo a la lista...Verifque");
				}
			}
		}	
		catch(Exception e)
		{
			ventanaProducto.mostrarMensaje("El Ingrediente No se pudo agregar, verifique que los datos sean correctos");
			ventanaProducto.borrarDatos();
		}
	}

}
 